package com.elloe.数组.螺旋矩阵;

/**
 * @author ElloeStudy(Sifa Zhang)
 * @create 2022-04-02 22:30
 * To: 真常应物，真常得性，常清常静，常清静矣
 */
public class GenerateMatrix {
    public static void main(String[] args) {
        // 测试集
        int n = 3;

        int[][] res = new int[n][n];
        // 循环次数
        int loop = n/2;

        // 定义每次循环的起始位置
        int startX = 0;
        int startY = 0;

        // 定义偏移量
        int offset = 1;
        // 定义填充的数字
        int count = 1;
        // 定义中间位置
        int mid = n/2;
        while (loop > 0){
            int i = startX;
            int j = startY;

            // 模拟上侧从左到右
            for (; j < startY+n-offset ; ++j){
                res[startX][j] = count++;
            }
            // 模拟右侧从上到下
            for(; i < startX+n-offset ; ++i){
                res[i][j] = count++;
            }
            // 模拟下侧从右到左
            for (; j > startY ; j--){
                res[i][j] = count++;
            }
            // 模拟左侧从下到上
            for(; i > startX ; i--){
                res[i][j] = count++;
            }

            loop--; // 1,2,3 只需要循环一次

            startX += 1;
            startY += 1;

            offset += 2;
        }

        if (n%2 == 1){
            res[mid][mid] = count;
        }

        for (int[] resSingle : res){
            for(int x : resSingle){
                System.out.print(x + "  ");
            }
        }
    }
}
